package com.yidu.hbatsams.service.Impl;

import com.github.pagehelper.PageHelper;
import com.yidu.hbatsams.dao.AtsBaseItemMapper;
import com.yidu.hbatsams.dao.AtsBaseSportItemMapper;
import com.yidu.hbatsams.dao.AtsBaseSportMapper;
import com.yidu.hbatsams.domain.AtsBaseItem;
import com.yidu.hbatsams.domain.AtsBaseSport;
import com.yidu.hbatsams.domain.AtsBaseSportItem;
import com.yidu.hbatsams.service.AtsBaseSportService;
import com.yidu.hbatsams.utils.AtsBaseItemTree;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

@Service
public class AtsBaseSportServiceImpl implements AtsBaseSportService {

    @Resource
    AtsBaseSportMapper bsportDao;

    @Resource
    AtsBaseItemMapper atsBaseItemMapper ;

    @Resource
    AtsBaseSportItemMapper atsBaseSportItemMapper;
    @Resource
    AtsBaseSportMapper atsBaseSportMapper;

    @Override
    public List<AtsBaseSport> findCoa(Integer id) {

        return bsportDao.findCoa(id);
    }

    /**
     * 总行数
     * @return
     */
    @Override
    public int count() {
        return bsportDao.count();
    }

    /**
     * 查询所有
     * @param pageNum
     * @param pageSize
     * @return
     */
    @Override
    public List<AtsBaseSport> selectAll(Integer pageNum, Integer pageSize,String sportName) {
        PageHelper.startPage(pageNum, pageSize);

        List<AtsBaseSport> list = bsportDao.selectAll(sportName);

        return list;
    }

    /**
     * 修改单个状态
     * @param sportId
     * @param
     * @return
     */
    @Override
    public int updateId(int sportId) {
        AtsBaseSport atsBaseSport = new AtsBaseSport();
        atsBaseSport.setSportId(sportId);
        atsBaseSport.setIsva(0);
        return bsportDao.updateByPrimaryKeySelective(atsBaseSport);
    }

    /**
     * 下拉树
     * @param nodes
     * @return
     */
    @Override
    public List<AtsBaseItemTree> createTree(List<AtsBaseItemTree> nodes) {
        if (nodes == null || nodes.size() < 0){
            return null;
        }
        List<AtsBaseItemTree> nodeList = new ArrayList<>();// 根节点自定义，但是要和pid对应好
        // 将所有节点添加到多叉树中
        for (AtsBaseItemTree node : nodes) {
            if (node.getValue().equals("0")) {// 根节点自定义，但是要和pid对应好
                // 向根添加一个节点
                nodeList.add(node);
            } else {
                for (AtsBaseItemTree item : nodes) {
                    if (item.getId().equals(node.getValue())) {
                        item.getChildren().add(node);
                        item.setData(item.getChildren());
                        break ;
                    }
                }
            }
        }

        return nodeList;
    }

    /**
     * 查询体育项目
     * @return
     */
    @Override
    public List<AtsBaseSport> findAllSportName() {
        System.out.println("体育项目的Service");
        return bsportDao.findAllSportName();
    }

    /**
     * 根据项目名称查ID
     * @param sportName
     * @return
     */
    @Override
    public AtsBaseSport findSportId(String sportName) {
        System.out.println("根据项目名称查ID的Service实现类");
        return bsportDao.findSportId(sportName);
    }

    /**
     * 田家龙
     * @param athleteId
     * @return
     */
    @Override
    public AtsBaseSport selectAth(Integer athleteId) {
        return bsportDao.selectAth(athleteId);
    }


    /**
     * id查询
     * @param sportId
     * @return
     */
    @Override
    public AtsBaseSport findById(Integer sportId) {
        AtsBaseSport bs =bsportDao.findById(sportId);
        return bs;
    }

    /**
     * 增加方法
     * @param record
     * @param itemIds
     * @return
     */
    @Override
    public int insert(AtsBaseSport record, String itemIds) {
            //给状态
            record.setIsva(1);
            //调用增加方法
            int count= bsportDao.insert(record);
            //将ID存入数组
            String[] id = itemIds.split(",");
            //循环数组长度
            for (int i = 0; i < id.length ; i++) {
                    //给AtsBaseSportItem值赋值
                    AtsBaseSportItem atsBaseSportItem = new AtsBaseSportItem();
                    //id
                    atsBaseSportItem.setSportId(record.getSportId());
                    //数组
                    atsBaseSportItem.setItemId(Integer.parseInt(id[i]));
                    //时间
                    atsBaseSportItem.setCreatTime(new Date());
                    //创建人
                    atsBaseSportItem.setCreater("文晓源");
                    //状态
                    atsBaseSportItem.setIsva(1);
                    //调用增加方法
                    atsBaseSportItemMapper.insert(atsBaseSportItem);
            }
            //返回count
            return count;



    }

    /**
     * 修改方法
     * @param baseSport
     * @param arry
     * @param ids
     * @return
     */
    @Override
    public int updateByPrimaryKey(AtsBaseSport baseSport,int []arry,String ids) {
        //循环数组长度
        for (int i = 0; i < arry.length ; i++) {
            //关联表调用删除方法
            atsBaseSportItemMapper.deleteByPrimaryKey(arry[i]);
        }
        //将id存入数组
        String [] isd = ids.split(",");
        //循环数组长度
        for (int i = 0; i < isd.length; i++) {
            //给AtsBaseSportItem值赋值
            AtsBaseSportItem atsBaseSportItem = new AtsBaseSportItem();
            //id
            atsBaseSportItem.setSportId(baseSport.getSportId());
            //指标id
            atsBaseSportItem.setItemId(Integer.parseInt(isd[i]));
            //状态
            atsBaseSportItem.setIsva(1);
            //关联表调用增加方法
            atsBaseSportItemMapper.insert(atsBaseSportItem);
        }
        //调用项目管理根据id方法
        AtsBaseSport bs = bsportDao.findById(baseSport.getSportId());
        //给时间赋值
        baseSport.setCreatTime(bs.getCreatTime());

        //返回调用项目管理修改方法
        return bsportDao.updateByPrimaryKey(baseSport);
    }

    @Override
    public List<AtsBaseSport> findAll() {
        List<AtsBaseSport> list = bsportDao.findAll();
        return list;
    }

    /**
     * 树状
     * @return
     */
    @Override
    public List<AtsBaseItemTree> findTreeNode() {
        //list存入关联表查询所有方法
        List<AtsBaseItem> list = atsBaseItemMapper.findAll(1);
        List<AtsBaseItemTree> listTree = new ArrayList<>();
        for (Iterator<AtsBaseItem> iterator = list.iterator(); iterator.hasNext(); ) {
            AtsBaseItem next =  iterator.next();
            AtsBaseItemTree AtsBaseItemTree = new AtsBaseItemTree();
            AtsBaseItemTree.setId(String.valueOf(next.getItemId()));
            AtsBaseItemTree.setValue(String.valueOf(next.getParentId()));
            AtsBaseItemTree.setTitle(next.getItemExp());
            listTree.add(AtsBaseItemTree);

        }
        List<AtsBaseItemTree> listAtsBaseItemTree = createTree(listTree);

        return listAtsBaseItemTree;
    }

    /**
     * 根据ID查询
     * @param sportId
     * @return
     */
    @Override
    public AtsBaseSport selectByPrimaryKey(Integer sportId) {
        return atsBaseSportMapper.selectByPrimaryKey(sportId);
    }
}
